{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loading libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "??DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('/Users/groverprince/Documents/msan/msan_ml/fastai')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "from fastai.imports import *\n",
    "from fastai.structured import *\n",
    "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n",
    "from IPython.display import display\n",
    "from sklearn import metrics\n",
    "from ggplot import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loading feather data already half processed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "PATH = \"/Users/groverprince/Documents/msan/msan_ml/fastai/courses/ml1\"\n",
    "\n",
    "df_raw = pd.read_feather('/Users/groverprince/Documents/msan/msan_ml/fastai/courses/ml1/tmp/raw')\n",
    "df_trn, y_trn, nas = proc_df(df_raw, 'SalePrice')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def split_vals(a,n): return a[:n], a[n:]\n",
    "n_valid = 12000\n",
    "n_trn = len(df_trn)-n_valid\n",
    "X_train, X_valid = split_vals(df_trn, n_trn)\n",
    "y_train, y_valid = split_vals(y_trn, n_trn)\n",
    "raw_train, raw_valid = split_vals(df_raw, n_trn)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random forest from scratch (copied from Jeremy's)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 5, 7, 9, 1])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.permutation(np.arange(10))[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class TreeEnsemble():\n",
    "    def __init__(self, x, y, n_trees, sample_sz, min_leaf=5):\n",
    "        np.random.seed(42)\n",
    "        self.x,self.y,self.sample_sz,self.min_leaf = x,y,sample_sz,min_leaf\n",
    "        self.trees = [self.create_tree() for i in range(n_trees)]\n",
    "                \n",
    "    def tree_std(self,x_val): pass\n",
    "    def pred_ci(self, x_val) : pass\n",
    "    def plot_ci(self, x_val, y_val, n_pnt=100): pass\n",
    "    \n",
    "    def create_tree(self):\n",
    "        idxs = np.random.permutation(len(self.y))[:self.sample_sz]\n",
    "#         return DecisionTree(self.x.iloc[idxs], self.y[idxs], \n",
    "#                     idxs=np.array(range(self.sample_sz)), min_leaf=self.min_leaf)\n",
    "        return DecisionTree(self.x.iloc[idxs], self.y[idxs], \n",
    "                    idxs=np.array(range(self.sample_sz)), min_leaf=self.min_leaf)\n",
    "        \n",
    "    def predict(self, x):\n",
    "        return np.mean([t.predict(x) for t in self.trees], axis=0)\n",
    "\n",
    "def std_agg(cnt, s1, s2): return math.sqrt((s2/cnt) - (s1/cnt)**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class DecisionTree():\n",
    "    def __init__(self, x, y, idxs, min_leaf=5):\n",
    "        self.x,self.y,self.idxs,self.min_leaf = x,y,idxs,min_leaf\n",
    "        self.n,self.c = len(idxs), x.shape[1]\n",
    "        self.val = np.mean(y[idxs])\n",
    "        self.score = float('inf')\n",
    "        self.find_varsplit()\n",
    "        #self.path = []\n",
    "        \n",
    "    def find_varsplit(self):\n",
    "        for i in range(self.c): self.find_better_split(i)\n",
    "        if self.score == float('inf'): return\n",
    "        x = self.split_col\n",
    "        lhs = np.nonzero(x<=self.split)[0]\n",
    "        rhs = np.nonzero(x>self.split)[0]\n",
    "        self.lhs = DecisionTree(self.x, self.y, self.idxs[lhs])\n",
    "        self.rhs = DecisionTree(self.x, self.y, self.idxs[rhs])\n",
    "\n",
    "    def find_better_split(self, var_idx):\n",
    "        x,y = self.x.values[self.idxs,var_idx], self.y[self.idxs]\n",
    "        sort_idx = np.argsort(x)\n",
    "        sort_y,sort_x = y[sort_idx], x[sort_idx]\n",
    "        rhs_cnt,rhs_sum,rhs_sum2 = self.n, sort_y.sum(), (sort_y**2).sum()\n",
    "        lhs_cnt,lhs_sum,lhs_sum2 = 0,0.,0.\n",
    "\n",
    "        for i in range(0,self.n-self.min_leaf-1):\n",
    "            xi,yi = sort_x[i],sort_y[i]\n",
    "            lhs_cnt += 1; rhs_cnt -= 1\n",
    "            lhs_sum += yi; rhs_sum -= yi\n",
    "            lhs_sum2 += yi**2; rhs_sum2 -= yi**2\n",
    "            if i<self.min_leaf or xi==sort_x[i+1]:\n",
    "                continue\n",
    "\n",
    "            lhs_std = std_agg(lhs_cnt, lhs_sum, lhs_sum2)\n",
    "            rhs_std = std_agg(rhs_cnt, rhs_sum, rhs_sum2)\n",
    "            curr_score = lhs_std*lhs_cnt + rhs_std*rhs_cnt\n",
    "            if curr_score<self.score: \n",
    "                self.var_idx,self.score,self.split = var_idx,curr_score,xi\n",
    "\n",
    "    @property\n",
    "    def split_name(self): return self.x.columns[self.var_idx]\n",
    "    \n",
    "    @property\n",
    "    def split_col(self): return self.x.values[self.idxs,self.var_idx]\n",
    "\n",
    "    @property\n",
    "    def is_leaf(self): return self.score == float('inf')\n",
    "    \n",
    "    def __repr__(self):\n",
    "        s = f'n: {self.n}; val:{self.val}'\n",
    "        if not self.is_leaf:\n",
    "            s += f'; score:{self.score}; split:{self.split}; var:{self.split_name}'\n",
    "        return s\n",
    "\n",
    "    def predict(self, x):\n",
    "        return np.array([self.predict_row(xi) for xi in x])\n",
    "\n",
    "    def predict_row(self, xi):\n",
    "        if self.is_leaf: return self.val\n",
    "        t = self.lhs if xi[self.var_idx]<=self.split else self.rhs\n",
    "        return t.predict_row(xi) \n",
    "    \n",
    "    def contributions(self, xi): pass\n",
    "        \n",
    "       "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Random forest interpretetion from scratch (self)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Confidence based on tree variance. \n",
    "\n",
    "The idea is to take out predictions of all the validation observations and find for which of those validation data points, we are least confident. Then we can look at some pattern in those \n",
    "\n",
    "(Standard deviation means std deviation of Yi predictions from n_estimators. Output will have n_rows as number of rows in validation set)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**What are we going to get out of this -- **  \n",
    "\n",
    "* For *categorical variables*, for which category we are least confident about predictions . \n",
    "* For *continuous variables*, in what range are we least confident about predictions . "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 336,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def tree_std(self,x_val):\n",
    "    std =  np.std([t.predict(x_val) for t in self.trees], axis=0)\n",
    "    self.std = std\n",
    "    return std\n",
    "\n",
    "TreeEnsemble.tree_std = tree_std\n",
    "\n",
    "def pred_ci(self, x_val, percentile = 95):   \n",
    "    \n",
    "    \"\"\"\n",
    "    x_val = validation input\n",
    "    percentile = required confidence level\n",
    "    \"\"\"\n",
    "\n",
    "    allTree_preds = np.stack([t.predict(x_val) for t in self.trees], axis = 0)\n",
    "    \n",
    "    err_down = np.percentile(allTree_preds, (100 - percentile) / 2.0  ,axis=0)\n",
    "    err_up = np.percentile(allTree_preds, 100- (100 - percentile) / 2.0  ,axis=0)\n",
    "    \n",
    "    self.err_down = err_down\n",
    "    self.err_up = err_up\n",
    "    \n",
    "    return err_down, err_up\n",
    "    \n",
    "TreeEnsemble.pred_ci = pred_ci\n",
    "                \n",
    "    \n",
    "def plot_ci(self, x_val, y_val, n_pnt=100, doPlot=True):\n",
    "    \"\"\"\n",
    "    x_val = validation input (independent)\n",
    "    y_val = validation output (dependent)\n",
    "    n_pnt = number of indexes to be shown in plot (sorted based on least confident predictions)\n",
    "\n",
    "    \"\"\"\n",
    "    ci = self.pred_ci(x_val)[1] - self.pred_ci(x_val)[0]\n",
    "    #plt_indx = np.argsort(-ci)[n_pnt]\n",
    "    plt_idx = np.argsort(ci)[::-1][:n_pnt]\n",
    "    yhat = self.predict(x_val)\n",
    "    y = y_val\n",
    "    \n",
    "    df = pd.DataFrame()\n",
    "    df['down'] = self.pred_ci(x_val)[0] \n",
    "    df['up'] = self.pred_ci(x_val)[1]\n",
    "    df['y'] = y\n",
    "    df['yhat'] = yhat\n",
    "    df['error'] = df['up'] - df['down']\n",
    "    \n",
    "    df_out = df.iloc[plt_idx]\n",
    "    df_out.reset_index(inplace=True)\n",
    "    \n",
    "    \n",
    "    if doPlot is True :\n",
    "        plt.figure(figsize= (15,7))\n",
    "\n",
    "        plt.errorbar(df_out['index'], df_out['yhat'], yerr= df_out['error'], fmt='o',\n",
    "                     ecolor='g',  elinewidth = 0.4)\n",
    "        plt.plot(df_out['index'], df_out['y'], 'r^')\n",
    "        plt.xlabel('Index')\n",
    "        plt.ylabel('Predictions')\n",
    "        plt.title(f'Prediction intervals for worse {n_pnt} predictions')\n",
    "        plt.locator_params(nbins=4)\n",
    "        plt.legend()\n",
    "        plt.show()\n",
    "    \n",
    "    return plt_idx, df\n",
    "    \n",
    "TreeEnsemble.plot_ci = plot_ci\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cols = ['MachineID', 'YearMade', 'MachineHoursCurrentMeter', 'ProductSize', 'Enclosure',\n",
    "        'Coupler_System', 'saleYear']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 490,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ens = TreeEnsemble(X_train[cols], y_train, 5, 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 359,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nPAAAgJb4fzbhsjXM87xWAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12213ea20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# features with maximum confidence interval and worse n predictions \n",
    "pred_int = X_valid[cols].iloc[ens.plot_ci(X_valid[cols].values, y_valid, 100)[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 360,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MachineID</th>\n",
       "      <th>YearMade</th>\n",
       "      <th>MachineHoursCurrentMeter</th>\n",
       "      <th>ProductSize</th>\n",
       "      <th>Enclosure</th>\n",
       "      <th>Coupler_System</th>\n",
       "      <th>saleYear</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>394558</th>\n",
       "      <td>1319057</td>\n",
       "      <td>1986</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394028</th>\n",
       "      <td>1275846</td>\n",
       "      <td>1986</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>395593</th>\n",
       "      <td>384547</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394062</th>\n",
       "      <td>574764</td>\n",
       "      <td>1983</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394333</th>\n",
       "      <td>1290844</td>\n",
       "      <td>1991</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393078</th>\n",
       "      <td>1791687</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393769</th>\n",
       "      <td>1838187</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393070</th>\n",
       "      <td>1807106</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394536</th>\n",
       "      <td>1828168</td>\n",
       "      <td>1985</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393069</th>\n",
       "      <td>1809809</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393073</th>\n",
       "      <td>1879735</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>398866</th>\n",
       "      <td>1806392</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393074</th>\n",
       "      <td>1875745</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393560</th>\n",
       "      <td>1925412</td>\n",
       "      <td>1985</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>396211</th>\n",
       "      <td>1813643</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393071</th>\n",
       "      <td>1924697</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393072</th>\n",
       "      <td>1939065</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>396212</th>\n",
       "      <td>1883763</td>\n",
       "      <td>1984</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393077</th>\n",
       "      <td>1836132</td>\n",
       "      <td>1985</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394348</th>\n",
       "      <td>5765</td>\n",
       "      <td>1994</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393959</th>\n",
       "      <td>327575</td>\n",
       "      <td>1994</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394036</th>\n",
       "      <td>63657</td>\n",
       "      <td>1994</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394037</th>\n",
       "      <td>63657</td>\n",
       "      <td>1994</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>392276</th>\n",
       "      <td>211171</td>\n",
       "      <td>1994</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394675</th>\n",
       "      <td>987051</td>\n",
       "      <td>1992</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393486</th>\n",
       "      <td>6841</td>\n",
       "      <td>1990</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>392594</th>\n",
       "      <td>714159</td>\n",
       "      <td>1991</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>399069</th>\n",
       "      <td>356368</td>\n",
       "      <td>1992</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>399063</th>\n",
       "      <td>122641</td>\n",
       "      <td>1990</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394191</th>\n",
       "      <td>544422</td>\n",
       "      <td>1991</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>398910</th>\n",
       "      <td>1939496</td>\n",
       "      <td>1993</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394421</th>\n",
       "      <td>1800472</td>\n",
       "      <td>1986</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393941</th>\n",
       "      <td>1596820</td>\n",
       "      <td>1993</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394424</th>\n",
       "      <td>1796323</td>\n",
       "      <td>1986</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393942</th>\n",
       "      <td>1919932</td>\n",
       "      <td>1993</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>400608</th>\n",
       "      <td>1804238</td>\n",
       "      <td>1991</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394426</th>\n",
       "      <td>1567544</td>\n",
       "      <td>1988</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394427</th>\n",
       "      <td>1927536</td>\n",
       "      <td>1993</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394422</th>\n",
       "      <td>1857754</td>\n",
       "      <td>1986</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>400609</th>\n",
       "      <td>1890749</td>\n",
       "      <td>1989</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393427</th>\n",
       "      <td>1861557</td>\n",
       "      <td>1988</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>398006</th>\n",
       "      <td>1846933</td>\n",
       "      <td>1993</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>398773</th>\n",
       "      <td>1897056</td>\n",
       "      <td>1989</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>397994</th>\n",
       "      <td>1911811</td>\n",
       "      <td>1987</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393948</th>\n",
       "      <td>1656398</td>\n",
       "      <td>1988</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>391397</th>\n",
       "      <td>2303611</td>\n",
       "      <td>1991</td>\n",
       "      <td>7638.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>398034</th>\n",
       "      <td>1789123</td>\n",
       "      <td>1987</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394545</th>\n",
       "      <td>111161</td>\n",
       "      <td>1975</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394819</th>\n",
       "      <td>1489095</td>\n",
       "      <td>1983</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394328</th>\n",
       "      <td>652080</td>\n",
       "      <td>1990</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394549</th>\n",
       "      <td>120095</td>\n",
       "      <td>1978</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394737</th>\n",
       "      <td>147478</td>\n",
       "      <td>1996</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393990</th>\n",
       "      <td>328744</td>\n",
       "      <td>1997</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394181</th>\n",
       "      <td>328738</td>\n",
       "      <td>1996</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394182</th>\n",
       "      <td>89909</td>\n",
       "      <td>1996</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394218</th>\n",
       "      <td>353109</td>\n",
       "      <td>1997</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393668</th>\n",
       "      <td>221979</td>\n",
       "      <td>1998</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393667</th>\n",
       "      <td>266425</td>\n",
       "      <td>1997</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394035</th>\n",
       "      <td>11622</td>\n",
       "      <td>1991</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393076</th>\n",
       "      <td>1490536</td>\n",
       "      <td>1985</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        MachineID  YearMade  MachineHoursCurrentMeter  ProductSize  Enclosure  \\\n",
       "394558    1319057      1986                       0.0            0          3   \n",
       "394028    1275846      1986                       0.0            0          3   \n",
       "395593     384547      1000                       0.0            5          1   \n",
       "394062     574764      1983                       0.0            4          1   \n",
       "394333    1290844      1991                       0.0            0          3   \n",
       "393078    1791687      1984                       0.0            2          3   \n",
       "393769    1838187      1984                       0.0            2          3   \n",
       "393070    1807106      1984                       0.0            2          6   \n",
       "394536    1828168      1985                       0.0            2          1   \n",
       "393069    1809809      1984                       0.0            2          1   \n",
       "393073    1879735      1984                       0.0            2          3   \n",
       "398866    1806392      1984                       0.0            2          6   \n",
       "393074    1875745      1984                       0.0            2          3   \n",
       "393560    1925412      1985                       0.0            2          3   \n",
       "396211    1813643      1984                       0.0            2          1   \n",
       "393071    1924697      1984                       0.0            2          6   \n",
       "393072    1939065      1984                       0.0            2          6   \n",
       "396212    1883763      1984                       0.0            2          1   \n",
       "393077    1836132      1985                       0.0            2          6   \n",
       "394348       5765      1994                       0.0            0          1   \n",
       "393959     327575      1994                       0.0            0          1   \n",
       "394036      63657      1994                       0.0            0          1   \n",
       "394037      63657      1994                       0.0            0          1   \n",
       "392276     211171      1994                       0.0            0          1   \n",
       "394675     987051      1992                       0.0            4          1   \n",
       "393486       6841      1990                       0.0            4          1   \n",
       "392594     714159      1991                       0.0            4          1   \n",
       "399069     356368      1992                       0.0            3          1   \n",
       "399063     122641      1990                       0.0            3          1   \n",
       "394191     544422      1991                       0.0            3          1   \n",
       "...           ...       ...                       ...          ...        ...   \n",
       "398910    1939496      1993                       0.0            2          6   \n",
       "394421    1800472      1986                       0.0            2          3   \n",
       "393941    1596820      1993                       0.0            2          6   \n",
       "394424    1796323      1986                       0.0            2          3   \n",
       "393942    1919932      1993                       0.0            2          1   \n",
       "400608    1804238      1991                       0.0            2          1   \n",
       "394426    1567544      1988                       0.0            2          6   \n",
       "394427    1927536      1993                       0.0            2          1   \n",
       "394422    1857754      1986                       0.0            2          3   \n",
       "400609    1890749      1989                       0.0            2          1   \n",
       "393427    1861557      1988                       0.0            2          6   \n",
       "398006    1846933      1993                       0.0            2          1   \n",
       "398773    1897056      1989                       0.0            2          3   \n",
       "397994    1911811      1987                       0.0            2          1   \n",
       "393948    1656398      1988                       0.0            2          3   \n",
       "391397    2303611      1991                    7638.0            2          3   \n",
       "398034    1789123      1987                       0.0            2          6   \n",
       "394545     111161      1975                       0.0            0          1   \n",
       "394819    1489095      1983                       0.0            0          3   \n",
       "394328     652080      1990                       0.0            0          3   \n",
       "394549     120095      1978                       0.0            0          1   \n",
       "394737     147478      1996                       0.0            0          1   \n",
       "393990     328744      1997                       0.0            0          1   \n",
       "394181     328738      1996                       0.0            0          1   \n",
       "394182      89909      1996                       0.0            0          1   \n",
       "394218     353109      1997                       0.0            0          1   \n",
       "393668     221979      1998                       0.0            0          1   \n",
       "393667     266425      1997                       0.0            0          1   \n",
       "394035      11622      1991                       0.0            0          1   \n",
       "393076    1490536      1985                       0.0            2          3   \n",
       "\n",
       "        Coupler_System  saleYear  \n",
       "394558               0      2011  \n",
       "394028               0      2011  \n",
       "395593               0      2011  \n",
       "394062               0      2011  \n",
       "394333               0      2011  \n",
       "393078               0      2011  \n",
       "393769               0      2011  \n",
       "393070               0      2011  \n",
       "394536               0      2011  \n",
       "393069               0      2011  \n",
       "393073               0      2011  \n",
       "398866               0      2011  \n",
       "393074               0      2011  \n",
       "393560               0      2011  \n",
       "396211               0      2011  \n",
       "393071               0      2011  \n",
       "393072               0      2011  \n",
       "396212               0      2011  \n",
       "393077               0      2011  \n",
       "394348               0      2011  \n",
       "393959               0      2011  \n",
       "394036               0      2011  \n",
       "394037               0      2011  \n",
       "392276               0      2011  \n",
       "394675               0      2011  \n",
       "393486               0      2011  \n",
       "392594               0      2011  \n",
       "399069               0      2011  \n",
       "399063               0      2011  \n",
       "394191               0      2011  \n",
       "...                ...       ...  \n",
       "398910               0      2011  \n",
       "394421               0      2011  \n",
       "393941               0      2011  \n",
       "394424               0      2011  \n",
       "393942               0      2011  \n",
       "400608               0      2011  \n",
       "394426               0      2011  \n",
       "394427               0      2011  \n",
       "394422               0      2011  \n",
       "400609               0      2011  \n",
       "393427               0      2011  \n",
       "398006               0      2011  \n",
       "398773               0      2011  \n",
       "397994               0      2011  \n",
       "393948               0      2011  \n",
       "391397               0      2011  \n",
       "398034               0      2011  \n",
       "394545               0      2011  \n",
       "394819               0      2011  \n",
       "394328               0      2011  \n",
       "394549               0      2011  \n",
       "394737               0      2011  \n",
       "393990               0      2011  \n",
       "394181               0      2011  \n",
       "394182               0      2011  \n",
       "394218               0      2011  \n",
       "393668               0      2011  \n",
       "393667               0      2011  \n",
       "394035               0      2011  \n",
       "393076               0      2011  \n",
       "\n",
       "[100 rows x 7 columns]"
      ]
     },
     "execution_count": 360,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred_int"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 357,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x121b02400>"
      ]
     },
     "execution_count": 357,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAD8CAYAAABXe05zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACptJREFUeJzt3VGopPdZx/Hf427SNm3ZWLOWsAluhFAIjTRhCYqllEo1\n7YrxwosUhCqFXCmKF7KlIPQueiF6IUKo0YC1QarFkFQl1UARNOmJSZqkydo0riRL6qaUro2BRuPj\nxZno6bKbnQ0ze/LM+Xxg2Jn3DP/8n4F89+U97yTV3QFgjh/Y7Q0AcGGEG2AY4QYYRrgBhhFugGGE\nG2AY4QYYRrgBhhFugGH2r2PRK664og8fPryOpQE20sMPP/yt7j64zHvXEu7Dhw9na2trHUsDbKSq\n+rdl3+tSCcAwwg0wjHADDCPcAMMIN8Awwg0wjHADDCPcAMMIN8Awwg0wjHADDCPcAMMIN8Awwg0w\njHADDCPcAMMIN8Awwg0wjHADDCPcAMMIN8Awwg0wzFLhrqqbq+p4VT1TVcfWvSkAzu284a6qfUn+\nIMlHklyX5GNVdd26NwbA2S1zxn1Tkme6+9nufiXJ3UluWe+2ADiXZcJ9KMlzO14/vzgGwC5Y2S8n\nq+q2qtqqqq0XX3xxVcsCcIZlwn0yydU7Xl+1OPZ9uvuO7j7S3UcOHjy4qv0BcIZlwv2VJNdW1TVV\ndWmSW5Pcs95tAXAu+8/3hu7+76r6lSR/m2Rfkju7+8m17wyAszpvuJOku7+Y5Itr3gsAS/DNSYBh\nhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYR\nboBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4\nAYYRboBhhBtgGOEGGGb/OhZ9/OTpHD523zqWZg1O3H50t7cAXABn3ADDCDfAMMINMIxwAwwj3ADD\nCDfAMMINMIxwAwwj3ADDLBXuqrq8qj5fVU9X1VNV9RPr3hgAZ7fsV95/P8nfdPcvVNWlSS5b454A\neB3nDXdVHUjygSS/lCTd/UqSV9a7LQDOZZlLJdckeTHJH1fVI1X1map6+5r3BcA5LBPu/UluTPKH\n3X1Dkv9McuzMN1XVbVW1VVVbr758esXbBOA1y4T7+STPd/eDi9efz3bIv09339HdR7r7yL7LDqxy\njwDscN5wd/c3kzxXVe9ZHPqpJF9b664AOKdl7yr51SSfXdxR8mySX17flgB4PUuFu7sfTXJkzXsB\nYAm+OQkwjHADDCPcAMMIN8Awwg0wjHADDCPcAMMIN8Awy35z8oJcf+hAtm4/uo6lAfY8Z9wAwwg3\nwDDCDTCMcAMMI9wAwwg3wDDCDTCMcAMMI9wAwwg3wDDCDTCMcAMMI9wAwwg3wDDCDTCMcAMMI9wA\nwwg3wDDCDTCMcAMMI9wAwwg3wDDCDTCMcAMMI9wAwwg3wDDCDTDM/nUs+vjJ0zl87L51LA1rd+L2\no7u9BXhdzrgBhhFugGGEG2AY4QYYRrgBhhFugGGEG2AY4QYYRrgBhjlvuKvqzqo6VVVPXIwNAfD6\nljnj/pMkN695HwAs6bzh7u4vJ/n2RdgLAEtY2TXuqrqtqraqauvVl0+valkAzrCycHf3Hd19pLuP\n7LvswKqWBeAM7ioBGEa4AYZZ5nbAzyX5xyTvqarnq+oT698WAOdy3v8DTnd/7GJsBIDluFQCMIxw\nAwwj3ADDCDfAMMINMIxwAwwj3ADDCDfAMOf9As4bcf2hA9m6/eg6lgbY85xxAwwj3ADDCDfAMMIN\nMIxwAwwj3ADDCDfAMMINMIxwAwwj3ADDCDfAMMINMIxwAwwj3ADDCDfAMMINMIxwAwwj3ADDCDfA\nMMINMIxwAwwj3ADDCDfAMMINMIxwAwwj3ADD7F/Hoo+fPJ3Dx+5bx9IAb0onbj960f5ZzrgBhhFu\ngGGEG2AY4QYYRrgBhhFugGGEG2AY4QYYRrgBhjlvuKvqrVX1UFU9VlVPVtWnL8bGADi7Zb7y/r0k\nH+rul6rqkiT/UFV/3d3/tOa9AXAW5w13d3eSlxYvL1k8ep2bAuDclrrGXVX7qurRJKeS3N/dD653\nWwCcy1Lh7u5Xu/t9Sa5KclNVvffM91TVbVW1VVVbr758etX7BGDhgu4q6e7vJHkgyc1n+dkd3X2k\nu4/su+zAqvYHwBmWuavkYFVdvnj+tiQfTvL0ujcGwNktc1fJlUnuqqp92Q79n3f3vevdFgDnssxd\nJV9NcsNF2AsAS/DNSYBhhBtgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYZZ5puTF+z6QweydfvRdSwN\nsOc54wYYRrgBhhFugGGEG2AY4QYYRrgBhhFugGGEG2AY4QYYRrgBhhFugGGEG2AY4QYYprp79YtW\nfTfJ8ZUv/OZ1RZJv7fYmLrK9NvNemzfZezPv9rw/0t0Hl3njWv6zrkmOd/eRNa39plNVW3tp3mTv\nzbzX5k323syT5nWpBGAY4QYYZl3hvmNN675Z7bV5k703816bN9l7M4+Zdy2/nARgfVwqARhmpeGu\nqpur6nhVPVNVx1a59m6qqjur6lRVPbHj2Luq6v6q+vrizx/c8bNPLj6D41X1M7uz6zeuqq6uqgeq\n6mtV9WRV/dri+EbOXFVvraqHquqxxbyfXhzfyHlfU1X7quqRqrp38XrT5z1RVY9X1aNVtbU4NnPm\n7l7JI8m+JN9I8qNJLk3yWJLrVrX+bj6SfCDJjUme2HHsd5IcWzw/luS3F8+vW8z+liTXLD6Tfbs9\nwwXOe2WSGxfP35nkXxZzbeTMSSrJOxbPL0nyYJIf39R5d8z9G0n+LMm9i9ebPu+JJFeccWzkzKs8\n474pyTPd/Wx3v5Lk7iS3rHD9XdPdX07y7TMO35LkrsXzu5L8/I7jd3f397r7X5M8k+3PZozufqG7\n/3nx/LtJnkpyKBs6c297afHyksWjs6HzJklVXZXkaJLP7Di8sfO+jpEzrzLch5I8t+P184tjm+rd\n3f3C4vk3k7x78XyjPoeqOpzkhmyfhW7szIvLBo8mOZXk/u7e6HmT/F6S30zyPzuObfK8yfZfxl+q\nqoer6rbFsZEzr+ubk3tKd3dVbdztOVX1jiR/keTXu/s/qur/frZpM3f3q0neV1WXJ/lCVb33jJ9v\nzLxV9bNJTnX3w1X1wbO9Z5Pm3eH93X2yqn44yf1V9fTOH06aeZVn3CeTXL3j9VWLY5vq36vqyiRZ\n/HlqcXwjPoequiTb0f5sd//l4vBGz5wk3f2dJA8kuTmbO+9PJvm5qjqR7UuaH6qqP83mzpsk6e6T\niz9PJflCti99jJx5leH+SpJrq+qaqro0ya1J7lnh+m829yT5+OL5x5P81Y7jt1bVW6rqmiTXJnlo\nF/b3htX2qfUfJXmqu393x482cuaqOrg4005VvS3Jh5M8nQ2dt7s/2d1XdffhbP97+vfd/YvZ0HmT\npKreXlXvfO15kp9O8kSmzrzi39p+NNt3IHwjyad2+zevK5zrc0leSPJf2b7W9YkkP5Tk75J8PcmX\nkrxrx/s/tfgMjif5yG7v/w3M+/5sXw/8apJHF4+PburMSX4sySOLeZ9I8luL4xs57xmzfzD/f1fJ\nxs6b7bvdHls8nnytT1Nn9s1JgGF8cxJgGOEGGEa4AYYRboBhhBtgGOEGGEa4AYYRboBh/hfs53tq\nhcP4tgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x123a069b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pred_int.Enclosure.value_counts().plot.barh()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For e.g. above plot shows that for most of **Enclosure corresponding to code 1**, we are not confident with  predictions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x121815518>"
      ]
     },
     "execution_count": 313,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x121b1bda0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pred_int.YearMade.value_counts().plot.barh()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above plot shows that we are least confident about predictions for **Year = 1984**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 352,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = raw_valid.copy()\n",
    "x['pred_std'] = ens.plot_ci(X_valid[cols].values, y_valid, doPlot=False)[1].error.reshape(x.shape[0],1)\n",
    "#ens.tree_std(X_valid[cols].values)\n",
    "x['pred'] = ens.predict(X_valid[cols].values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 354,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalePrice</th>\n",
       "      <th>pred</th>\n",
       "      <th>pred_std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ProductSize</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Compact</th>\n",
       "      <td>9.735093</td>\n",
       "      <td>10.117707</td>\n",
       "      <td>0.644770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Large</th>\n",
       "      <td>10.470589</td>\n",
       "      <td>10.302451</td>\n",
       "      <td>0.864983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Large / Medium</th>\n",
       "      <td>10.691871</td>\n",
       "      <td>10.718395</td>\n",
       "      <td>0.575581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Medium</th>\n",
       "      <td>10.681511</td>\n",
       "      <td>10.604615</td>\n",
       "      <td>0.612460</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mini</th>\n",
       "      <td>9.535147</td>\n",
       "      <td>9.562749</td>\n",
       "      <td>0.424186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Small</th>\n",
       "      <td>10.324448</td>\n",
       "      <td>10.368326</td>\n",
       "      <td>0.459777</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                SalePrice       pred  pred_std\n",
       "ProductSize                                   \n",
       "Compact          9.735093  10.117707  0.644770\n",
       "Large           10.470589  10.302451  0.864983\n",
       "Large / Medium  10.691871  10.718395  0.575581\n",
       "Medium          10.681511  10.604615  0.612460\n",
       "Mini             9.535147   9.562749  0.424186\n",
       "Small           10.324448  10.368326  0.459777"
      ]
     },
     "execution_count": 354,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "flds = ['ProductSize', 'SalePrice', 'pred', 'pred_std']\n",
    "summ = x[flds].groupby(flds[0]).mean()\n",
    "summ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 355,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ProductSize\n",
       "Large             0.083959\n",
       "Compact           0.063727\n",
       "Medium            0.057754\n",
       "Large / Medium    0.053700\n",
       "Mini              0.044358\n",
       "Small             0.044344\n",
       "dtype: float64"
      ]
     },
     "execution_count": 355,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(summ.pred_std/summ.pred).sort_values(ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above shows we are least confident about **large and compact** product sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature importance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the same random forest model, by predicting on randomized values on specific column, we can find out if that specific column has high importance for prediction or not."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 404,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# defining rmse as scoring criteria (therefore smaller is better)\n",
    "\n",
    "def score(x1,x2):\n",
    "    return metrics.mean_squared_error(x1,x2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 408,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def feat_imp(m,x,y, small_bet = True):\n",
    "    score_list = {}\n",
    "    score_list['original'] = score(m.predict(x.values), y)\n",
    "    imp = {}\n",
    "    for i in range(len(x.columns)):\n",
    "        rand_idx = np.random.permutation(len(x))\n",
    "        new_coli = x.values[rand_idx, i]\n",
    "        \n",
    "        new_x = x.copy()\n",
    "        new_x[x.columns[i]] = new_coli\n",
    "        \n",
    "        score_list[x.columns[i]] = score(m.predict(new_x.values), y)\n",
    "        \n",
    "        imp[x.columns[i]] = score_list['original'] - score_list[x.columns[i]]   \n",
    "        \n",
    "    if small_bet:\n",
    "        return sorted(imp.items(), key=lambda x: x[1])\n",
    "    else:\n",
    "        return sorted(imp.items(), key=lambda x: x[1], reverse=True)\n",
    "                           "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 455,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "importance = feat_imp(ens, X_train[cols], y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 456,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('YearMade', -0.21947050888595573),\n",
       " ('Coupler_System', -0.21318328275792894),\n",
       " ('ProductSize', -0.18353291714217482),\n",
       " ('saleYear', -0.045706193607739254),\n",
       " ('Enclosure', -0.041566508577359523),\n",
       " ('MachineID', -0.01399141076436905),\n",
       " ('MachineHoursCurrentMeter', -1.9246700722952426e-05)]"
      ]
     },
     "execution_count": 456,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now if some feature decreases RMSE (score) after being shuffled means that the model is better off without that feature. Meaning - that removing that feature is going to make model better. \n",
    "\n",
    "The featuure which make predictions very bad after being removed is one which must be very important for the model. That's how the feature importance is decided.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By looking at the above results, we can remove **MachineHoursCurrentMeter** and look at the plot of other feature importances. Let's just plot all of them for now"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 457,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "di = {'feat': [i[0] for i in importance], 'imp': [-i[1] for i in importance]}\n",
    "df_imp = pd.DataFrame(di)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 458,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x125d13978>"
      ]
     },
     "execution_count": 458,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x125d0a6a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_imp.plot('feat', 'imp', figsize=(10,6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From the above plot, **Coupler system, ProductSize, YearMade** are 3 most importance features among all other selected features.  \n",
    "\n",
    "Let's see what **sklearn random forest** say about importance features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 450,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "rf = RandomForestRegressor(n_estimators=40, min_samples_leaf=3, max_features=0.5, n_jobs=-1, oob_score=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 451,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "m = rf.fit(X_train[cols], y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 452,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x13201a160>"
      ]
     },
     "execution_count": 452,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nIFT54QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1320285c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rf_feat_importance(m, X_train[cols]).plot('cols', 'imp', figsize = (10,6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As observed from the 2 plots, feature importance is more or less same as **sklearn** implementation. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tree Interpretor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Feature importance** (as in above section) is useful if we want to analyze which features are important for overall random forest model. But if we are interested in one particular observation, then the role of **tree interpretor** comes into play.   \n",
    "\n",
    "*For example, there is a RF model which predicts - **a patient X coming to hospital has high probability of readmission or not?**. For sake of similicity, let's consider we only have 3 features - `patient's blood pressure data, patient's age and patient's sex`. Now, if our model says that `person A` has 80% chances of readmission, how can we know ** what is special in that person A that our model predicts he/she will be readmitted ? **.  In this case, tree interpretor tells the **prediction path ** followed for that particular patient. Something like, because **patient A** is 65 years old male, that is why our model predicts that he will be readmitted. Another **patient B** who my model predicts to be readmitted might be because B has high blood pressure (not because of age or sex).   *\n",
    "\n",
    "To conclude, each observation follows a different path of the tree and has different feature contributions for it's prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "def contributions(self, xi, path = None):\n",
    "    \n",
    "    \n",
    "    if self.is_leaf: return path.append(self.val)\n",
    "    \n",
    "    if path == None: path = []\n",
    "        \n",
    "    t = self.lhs if xi[self.var_idx]<=self.split else self.rhs  \n",
    "    try:\n",
    "        path.append((t.val, t.split_name, t.split))\n",
    "    except AttributeError:\n",
    "        pass\n",
    "    \n",
    "    t.contributions(xi, path)\n",
    "    return path\n",
    "\n",
    "DecisionTree.contributions = contributions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.4413227521592749"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ens = TreeEnsemble(X_train[cols], y_train, 5, 1000)\n",
    "tree = ens.trees[3]\n",
    "tree.predict_row(X_valid.values[10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "contr = []\n",
    "contr = tree.contributions(X_valid.values[10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(9.2304130502447865, 'YearMade', 1998.0),\n",
       " (9.3440723845211835, 'YearMade', 2001.0),\n",
       " (9.4090407478427167, 'saleYear', 2007.0),\n",
       " (9.3698557938690321, 'YearMade', 2005.0),\n",
       " 9.4413227521592749]"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "contr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 737,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "prediction = tree.predict_row(X_valid.values[1])\n",
    "bias = np.mean(y_valid)\n",
    "bias"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Find better split (Shikhar)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def best_split(df,var_x,var_y): \n",
    "    df_subset = df[[var_x, var_y]]\n",
    "    current_score = np.std(df_subset[var_y])\n",
    "    \n",
    "    for i in df_subset[var_x].unique():\n",
    "        lhs = df_subset[var_y][df_subset[var_x]<=i]\n",
    "        rhs = df_subset[var_y][df_subset[var_x]>i]\n",
    "        if len(rhs)==0:continue\n",
    "        new_score = (len(lhs)*np.std(lhs)+len(rhs)*np.std(rhs))/df_subset.shape[0]\n",
    "        if new_score < current_score:\n",
    "            current_score = new_score\n",
    "            var_x_best = i\n",
    "    return var_x_best,current_score"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
